package spring_04_annotations.annotations;

import javax.annotation.Resource;

import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;

@Service("personService")
public class PersonService {
	@Autowired
	private PersonDao personDaoImplOne;
	
	@Autowired
	@Qualifier("personDaoImplTwo")
	private PersonDao personDao2;
	
	@Resource(name="personDaoImplOne")
	private PersonDaoImplOne personDaoImplOnetest;
	
	public void savePerson(){
		this.personDaoImplOne.savePerson();
	}
	
	public void savePerson2(){
		this.personDao2.savePerson();
	}
	
	public void savePerson3(){
		this.personDaoImplOnetest.savePerson();
	}
	
	/**
	 * @Service("personService") 这个其实就相当于@Component("personService")
	 * 等于<bean id="personService" class="spring_04_annotations.annotations.PersonService"><bean/>
	 * 
	 * @Autowired相当于根据类型去匹配生成bean。
	 * 如@Autowired
	 * private PersonDao personDao;
	 * 就是根据PersonDao这个接口类型去匹配生成bean
	 * 
	 * 但是如果一个PersonDao接口，有俩个以上的实现类，就会报错，因为他不知道选哪一个
	 * 所以有俩种解决方法：
	 * 1，把private PersonDao personDao;改成private PersonDao #{确定的实现类名称}; 如：private PersonDao personDaoImplOne；
	 *	    这样，就会根据 PersonDao这个接口类型和personDaoImplOne这个名称去匹配生成实现类的bean。也就是说，PersonDao personDaoImplOne = new PersonDaoImplOne();
	 * 
	 * 2,和@Qualifier注解配合使用，原理和1方法一样的。@Qualifier(#{确定的实现类名称})
	 * 
	 * 
	 */
	
}
